home *** CD-ROM | disk | FTP | other *** search
/ Czech Logic, Card & Gambling Games / Logické hry.iso / hry / Fish Fillets / script / party1 / code.lua next >
Text File  |  2005-07-16  |  22KB  |  580 lines

  1.  
  2. --NOTE: glasses must be together in models.lua
  3. --NOTE: last glass is the plate
  4. local glasses = {}
  5. for i = 0, 8 do
  6.     glasses[i] = getModelsTable()[sklenka.index + i]
  7. end
  8.  
  9. local function setViewShiftX(model, reference, shift_x)
  10.     model_setViewShift(model.index,
  11.         reference.X + shift_x - model.X, 0)
  12. end
  13.  
  14. -- -----------------------------------------------------------------
  15. -- Init
  16. -- -----------------------------------------------------------------
  17. local function prog_init()
  18.     initModels()
  19.     sound_playMusic("music/rybky15.ogg")
  20.     local pokus = getRestartCount()
  21.     room.globpole = createArray(1024)
  22.  
  23.  
  24.     -- -------------------------------------------------------------
  25.     local function prog_init_room()
  26.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  27.  
  28.         room.uvod1 = 0
  29.         room.uvod2 = 0
  30.         room.nevylit = 0
  31.         room.ovalci = 0
  32.         if random(100) >= 130 - pokus * 30 then
  33.             room.uvod1 = 2
  34.         end
  35.         if random(100) >= 130 - pokus * 30 then
  36.             room.uvod2 = 2
  37.         end
  38.         if random(100) >= 120 - pokus * 20 then
  39.             room.nevylit = 2
  40.         end
  41.         if random(100) >= 120 - pokus * 20 then
  42.             room.ovalci = 2
  43.         end
  44.         if room.uvod2 == 0 then
  45.             room.globpole[1] = 1
  46.             room.globpole[2] = 1
  47.         else
  48.             room.globpole[1] = 0
  49.             room.globpole[2] = 0
  50.         end
  51.         room.bojise = 0
  52.  
  53.         return function()
  54.             if no_dialog() and isReady(small) and isReady(big) then
  55.                 pomb1 = false
  56.                 for pom1, glass in pairs(glasses) do
  57.                     if glass.dir == dir_left or glass.dir == dir_right then
  58.                         pomb1 = true
  59.                     end
  60.                 end
  61.                 pomb2 = false
  62.                 --NOTE: glass num.8(=plate) is not used here
  63.                 for pom1 = 0, 7 do
  64.                     local glass = glasses[pom1]
  65.                     if glass.Y == 27 and glass.X == 36 and ocel.X == 37 then
  66.                         pomb2 = true
  67.                     end
  68.                 end
  69.                 if room.uvod1 == 0 then
  70.                     addm(random(20) + 20, "pt1-m-parnicek")
  71.                     room.uvod1 = 1
  72.                 elseif room.uvod2 == 0 then
  73.                     addv(random(20) + 20, "pt1-v-predtucha")
  74.                     addm(0, "pt1-m-predtucha")
  75.                     planTimeAction(0, function() room.globpole[1] = 0 end)
  76.                     planTimeAction(0, function() room.globpole[2] = 0 end)
  77.                     room.uvod2 = 1
  78.                 elseif room.uvod2 == 1 and (room.globpole[1] ~= 0 or room.globpole[2] ~= 0) then
  79.                     room.uvod2 = 2
  80.                     addm(10 + random(10), "pt1-m-kostlivec")
  81.                 elseif room.bojise == 0 and room.uvod2 == 2 and (room.globpole[1] ~= 0 or room.globpole[2] ~= 0) and random(1000) < 3 then
  82.                     room.bojise = 1
  83.                     addm(20, "pt1-m-vylezt"..random(3))
  84.                     addv(random(10) + 5, "pt1-v-pryc"..random(2))
  85.                 elseif room.ovalci == 0 and pomb2 then
  86.                     room.ovalci = 1
  87.                     addv(3, "pt1-v-valec")
  88.                     addm(random(5), "pt1-m-nemuzu")
  89.                 elseif room.nevylit == 0 and pomb1 and random(100) < 1 then
  90.                     room.nevylit = 1
  91.                     addv(0, "pt1-v-pozor")
  92.                 end
  93.             end
  94.         end
  95.     end
  96.  
  97.     -- -------------------------------------------------------------
  98.     local function prog_init_frkavec()
  99.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  100.  
  101.         frkavec.cinnost = 0
  102.         frkavec:setEffect("invisible")
  103.  
  104.         return function()
  105.             switch(frkavec.okno){
  106.                 [1] = function()
  107.                     setViewShiftX(frkavec, kabina, 2)
  108.                 end,
  109.                 [2] = function()
  110.                     setViewShiftX(frkavec, kabina, 8)
  111.                 end,
  112.             }
  113.             if frkavec.cinnost > 0 then
  114.                 if frkavec.strana == 1 then
  115.                     frkavec:setEffect("reverse")
  116.                 else
  117.                     frkavec:setEffect("none")
  118.                 end
  119.             else
  120.                 frkavec:setEffect("invisible")
  121.             end
  122.             switch(frkavec.cinnost){
  123.                 [0] = function()
  124.                     if random(1000) < 8 then
  125.                         frkavec.okno = random(2) + 1
  126.                         if room.globpole[frkavec.okno] == 0 then
  127.                             frkavec.cinnost = 1
  128.                             frkavec.faze = 0
  129.                             frkavec.strana = random(2)
  130.                             room.globpole[frkavec.okno] = 1
  131.                         end
  132.                     end
  133.                 end,
  134.                 [1] = function()
  135.                     local anim_table = {
  136.                         [0] = function()
  137.                             frkavec.afaze = frkavec.faze
  138.                             frkavec.faze = frkavec.faze + 1
  139.                         end,
  140.                         [5] = function()
  141.                             frkavec.afaze = 5
  142.                             frkavec.delay = random(10) + 5
  143.                             frkavec.faze = frkavec.faze + 1
  144.                         end,
  145.                         [6] = function()
  146.                             if frkavec.delay > 0 then
  147.                                 frkavec.delay = frkavec.delay - 1
  148.                             else
  149.                                 frkavec.afaze = 6
  150.                                 frkavec.delay = 10
  151.                                 frkavec.faze = frkavec.faze + 1
  152.                             end
  153.                         end,
  154.                         [7] = function()
  155.                             if frkavec.delay > 0 then
  156.                                 frkavec.delay = frkavec.delay - 1
  157.                             else
  158.                                 frkavec.afaze = 5
  159.                                 if random(100) < 75 then
  160.                                     frkavec.delay = 2 + random(10)
  161.                                     frkavec.faze = 6
  162.                                 else
  163.                                     frkavec.faze = frkavec.faze + 1
  164.                                 end
  165.                             end
  166.                         end,
  167.                         [8] = function()
  168.                             frkavec.faze = frkavec.faze + 1
  169.                         end,
  170.                         [9] = function()
  171.                             room.globpole[frkavec.okno] = 0
  172.                             frkavec.faze = frkavec.faze + 1
  173.                         end,
  174.                         [10] = function()
  175.                             frkavec.afaze = 14 - frkavec.faze
  176.                             frkavec.faze = frkavec.faze + 1
  177.                             if frkavec.faze == 15 then
  178.                                 frkavec.cinnost = 0
  179.                             end
  180.                         end,
  181.                     }
  182.                     anim_table[1] = anim_table[0]
  183.                     anim_table[2] = anim_table[0]
  184.                     anim_table[3] = anim_table[0]
  185.                     anim_table[4] = anim_table[0]
  186.                     anim_table[11] = anim_table[10]
  187.                     anim_table[12] = anim_table[10]
  188.                     anim_table[13] = anim_table[10]
  189.                     anim_table[14] = anim_table[10]
  190.  
  191.                     switch(frkavec.faze)(anim_table)
  192.                 end,
  193.             }
  194.  
  195.             frkavec:updateAnim()
  196.         end
  197.     end
  198.  
  199.     -- -------------------------------------------------------------
  200.     local function prog_init_dama()
  201.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  202.  
  203.         dama:setEffect("invisible")
  204.         dama.kdeje = random(3)
  205.         dama.cinnost = 0
  206.  
  207.         return function()
  208.             switch(dama.okno){
  209.                 [1] = function()
  210.                     setViewShiftX(dama, kabina, 2)
  211.                 end,
  212.                 [2] = function()
  213.                     setViewShiftX(dama, kabina, 8)
  214.                 end,
  215.             }
  216.             if dama.cinnost > 0 then
  217.                 if dama.strana == 1 then
  218.                     dama:setEffect("reverse")
  219.                 else
  220.                     dama:setEffect("none")
  221.                 end
  222.             else
  223.                 dama:setEffect("invisible")
  224.             end
  225.             local cinnost_table = {
  226.                 [0] = function()
  227.                     if random(1000) < 8 then
  228.                         switch(dama.kdeje){
  229.                             [0] = function()
  230.                                 dama.okno = 1
  231.                                 dama.strana = 1
  232.                                 dama.kdebude = 1
  233.                             end,
  234.                             [1] = function()
  235.                                 dama.strana = random(2)
  236.                                 dama.okno = dama.strana + 1
  237.                                 dama.kdebude = dama.strana * 2
  238.                             end,
  239.                             [2] = function()
  240.                                 dama.okno = 2
  241.                                 dama.strana = 0
  242.                                 dama.kdebude = 1
  243.                             end,
  244.                         }
  245.                         if room.globpole[dama.okno] == 0 then
  246.                             room.globpole[dama.okno] = 1
  247.                             dama.cinnost = random(2) + 1
  248.                             dama.faze = 0
  249.                             dama.delay = 3
  250.                         end
  251.                     end
  252.                 end,
  253.                 [1] = function()
  254.                     local anim_table = {
  255.                         [20] = function()
  256.                             dama.faze = dama.faze + 1
  257.                         end,
  258.                         [24] = function()
  259.                             dama.afaze = 15
  260.                             dama.faze = dama.faze + 1
  261.                         end,
  262.                         [28] = function()
  263.                             dama.afaze = 6
  264.                             dama.faze = dama.faze + 1
  265.                         end,
  266.                         [30] = function()
  267.                             dama.faze = 7
  268.                         end,
  269.                         default = function()
  270.                             if dama.faze >= 0 and dama.faze <= 14 then
  271.                                 dama.afaze = dama.faze
  272.                                 if dama.delay > 0 then
  273.                                     dama.delay = dama.delay - 1
  274.                                 else
  275.                                     dama.delay = 3
  276.                                     dama.faze = dama.faze + 1
  277.                                     if dama.faze == 7 and dama.cinnost == 2 then
  278.                                         dama.faze = 20
  279.                                     end
  280.                                 end
  281.                                 if dama.faze == 15 then
  282.                                     dama.cinnost = 0
  283.                                     room.globpole[dama.okno] = 0
  284.                                     dama.kdeje = dama.kdebude
  285.                                 end
  286.                             end
  287.                         end,
  288.                     }
  289.  
  290.                     anim_table[21] = anim_table[20]
  291.                     anim_table[22] = anim_table[20]
  292.                     anim_table[23] = anim_table[20]
  293.                     anim_table[25] = anim_table[24]
  294.                     anim_table[26] = anim_table[24]
  295.                     anim_table[27] = anim_table[24]
  296.                     anim_table[29] = anim_table[28]
  297.  
  298.                     switch(dama.faze)(anim_table)
  299.                 end,
  300.             }
  301.  
  302.             cinnost_table[2] = cinnost_table[1]
  303.  
  304.             switch(dama.cinnost)(cinnost_table)
  305.  
  306.             dama:updateAnim()
  307.         end
  308.     end
  309.  
  310.     -- -------------------------------------------------------------
  311.     local function prog_init_kapitan()
  312.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  313.  
  314.         kapitan:setEffect("invisible")
  315.         kapitan.kdeje = random(3)
  316.         kapitan.cinnost = 0
  317.  
  318.         return function()
  319.             switch(kapitan.okno){
  320.                 [1] = function()
  321.                     setViewShiftX(kapitan, kabina, 2)
  322.                 end,
  323.                 [2] = function()
  324.                     setViewShiftX(kapitan, kabina, 8)
  325.                 end,
  326.             }
  327.             if kapitan.cinnost > 0 then
  328.                 if kapitan.strana == 0 then
  329.                     kapitan:setEffect("reverse")
  330.                 else
  331.                     kapitan:setEffect("none")
  332.                 end
  333.             else
  334.                 kapitan:setEffect("invisible")
  335.             end
  336.             local cinnost_table = {
  337.                 [0] = function()
  338.                     if random(1000) < 8 then
  339.                         switch(kapitan.kdeje){
  340.                             [0] = function()
  341.                                 kapitan.okno = 1
  342.                                 kapitan.strana = 1
  343.                                 kapitan.kdebude = 1
  344.                             end,
  345.                             [1] = function()
  346.                                 kapitan.strana = random(2)
  347.                                 kapitan.okno = kapitan.strana + 1
  348.                                 kapitan.kdebude = kapitan.strana * 2
  349.                             end,
  350.                             [2] = function()
  351.                                 kapitan.okno = 2
  352.                                 kapitan.strana = 0
  353.                                 kapitan.kdebude = 1
  354.                             end,
  355.                         }
  356.                         if room.globpole[kapitan.okno] == 0 then
  357.                             room.globpole[kapitan.okno] = 1
  358.                             kapitan.cinnost = random(2) + 1
  359.                             kapitan.faze = 0
  360.                             kapitan.delay = 2
  361.                         end
  362.                     end
  363.                 end,
  364.                 [1] = function()
  365.                     local anim_table = {
  366.                         [20] = function()
  367.                             kapitan.afaze = kapitan.faze - 20 + 15
  368.                             kapitan.faze = kapitan.faze + 1
  369.                         end,
  370.                         [24] = function()
  371.                             kapitan.afaze = 27 - kapitan.faze + 15
  372.                             kapitan.faze = kapitan.faze + 1
  373.                         end,
  374.                         [28] = function()
  375.                             kapitan.faze = 8
  376.                         end,
  377.                         default = function()
  378.                             if kapitan.faze >= 0 and kapitan.faze <= 14 then
  379.                                 kapitan.afaze = kapitan.faze
  380.                                 if kapitan.delay > 0 then
  381.                                     kapitan.delay = kapitan.delay - 1
  382.                                 else
  383.                                     kapitan.delay = 2
  384.                                     kapitan.faze = kapitan.faze + 1
  385.                                     if kapitan.faze == 8 and kapitan.cinnost == 2 then
  386.                                         kapitan.faze = 20
  387.                                     end
  388.                                 end
  389.                                 if kapitan.faze == 15 then
  390.                                     kapitan.cinnost = 0
  391.                                     room.globpole[kapitan.okno] = 0
  392.                                     kapitan.kdeje = kapitan.kdebude
  393.                                 end
  394.                             end
  395.                         end,
  396.                     }
  397.  
  398.                     anim_table[21] = anim_table[20]
  399.                     anim_table[22] = anim_table[20]
  400.                     anim_table[23] = anim_table[20]
  401.                     anim_table[25] = anim_table[24]
  402.                     anim_table[26] = anim_table[24]
  403.                     anim_table[27] = anim_table[24]
  404.  
  405.                     switch(kapitan.faze)(anim_table)
  406.                 end,
  407.             }
  408.  
  409.             cinnost_table[2] = cinnost_table[1]
  410.  
  411.             switch(kapitan.cinnost)(cinnost_table)
  412.  
  413.             kapitan:updateAnim()
  414.         end
  415.     end
  416.  
  417.     -- -------------------------------------------------------------
  418.     local function prog_init_lodnik()
  419.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  420.  
  421.         lodnik:setEffect("invisible")
  422.         lodnik.kdeje = random(3)
  423.         lodnik.cinnost = 0
  424.  
  425.         return function()
  426.             switch(lodnik.okno){
  427.                 [1] = function()
  428.                     setViewShiftX(lodnik, kabina, 2)
  429.                 end,
  430.                 [2] = function()
  431.                     setViewShiftX(lodnik, kabina, 8)
  432.                 end,
  433.             }
  434.             if lodnik.cinnost > 0 then
  435.                 if lodnik.strana == 1 then
  436.                     lodnik:setEffect("reverse")
  437.                 else
  438.                     lodnik:setEffect("none")
  439.                 end
  440.             else
  441.                 lodnik:setEffect("invisible")
  442.             end
  443.             switch(lodnik.cinnost){
  444.                 [0] = function()
  445.                     if random(1000) < 8 then
  446.                         switch(lodnik.kdeje){
  447.                             [0] = function()
  448.                                 lodnik.okno = 1
  449.                                 lodnik.strana = 1
  450.                                 lodnik.kdebude = 1
  451.                             end,
  452.                             [1] = function()
  453.                                 lodnik.strana = random(2)
  454.                                 lodnik.okno = lodnik.strana + 1
  455.                                 lodnik.kdebude = lodnik.strana * 2
  456.                             end,
  457.                             [2] = function()
  458.                                 lodnik.okno = 2
  459.                                 lodnik.strana = 0
  460.                                 lodnik.kdebude = 1
  461.                             end,
  462.                         }
  463.                         if room.globpole[lodnik.okno] == 0 then
  464.                             room.globpole[lodnik.okno] = 1
  465.                             lodnik.cinnost = random(2) + 1
  466.                             lodnik.faze = 0
  467.                             lodnik.delay = (lodnik.cinnost - 1) * 2
  468.                         end
  469.                     end
  470.                 end,
  471.                 [1] = function()
  472.                     if lodnik.faze >= 0 and lodnik.faze <= 9 then
  473.                         lodnik.afaze = lodnik.faze
  474.                         if lodnik.delay > 0 then
  475.                             lodnik.delay = lodnik.delay - 1
  476.                         else
  477.                             lodnik.delay = 1 + (lodnik.cinnost - 1) * 2
  478.                             lodnik.faze = lodnik.faze + 1
  479.                         end
  480.                         if lodnik.faze == 10 then
  481.                             lodnik.cinnost = 0
  482.                             room.globpole[lodnik.okno] = 0
  483.                             lodnik.kdeje = lodnik.kdebude
  484.                         end
  485.                     end
  486.                 end,
  487.                 [2] = function()
  488.                     if lodnik.faze >= 0 and lodnik.faze <= 12 then
  489.                         lodnik.afaze = lodnik.faze + 10
  490.                         if lodnik.delay > 0 then
  491.                             lodnik.delay = lodnik.delay - 1
  492.                         else
  493.                             lodnik.delay = 1 + (lodnik.cinnost - 1) * 2
  494.                             lodnik.faze = lodnik.faze + 1
  495.                         end
  496.                         if lodnik.faze == 13 then
  497.                             lodnik.cinnost = 0
  498.                             room.globpole[lodnik.okno] = 0
  499.                             lodnik.kdeje = lodnik.kdebude
  500.                         end
  501.                     end
  502.                 end,
  503.             }
  504.  
  505.             lodnik:updateAnim()
  506.         end
  507.     end
  508.  
  509.     -- -------------------------------------------------------------
  510.     local function prog_init_sklenka()
  511.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  512.  
  513.         for pom1 = 0, 8 do
  514.             room.globpole[1000 + pom1] = 0
  515.         end
  516.  
  517.         return function()
  518.             for pom1, glass in pairs(glasses) do
  519.                 pom2 = room.globpole[1000 + pom1]
  520.                 if glass.dir ~= dir_no then
  521.                     if pom2 == 0 then
  522.                         pom2 = 9
  523.                     elseif pom2 <= 6 then
  524.                         pom2 = pom2 + 6
  525.                     end
  526.                 end
  527.                 if pom2 == 0 then
  528.                     glass.afaze = 0
  529.                 else
  530.                     pom2 = pom2 - 1
  531.                     glass.afaze = 2 - math.mod(math.floor(pom2 / 3), 2)
  532.                 end
  533.                 room.globpole[1000 + pom1] = pom2
  534.                 glass:updateAnim()
  535.             end
  536.         end
  537.     end
  538.  
  539.     -- --------------------
  540.     local update_table = {}
  541.     local subinit
  542.     subinit = prog_init_room()
  543.     if subinit then
  544.         table.insert(update_table, subinit)
  545.     end
  546.     subinit = prog_init_frkavec()
  547.     if subinit then
  548.         table.insert(update_table, subinit)
  549.     end
  550.     subinit = prog_init_dama()
  551.     if subinit then
  552.         table.insert(update_table, subinit)
  553.     end
  554.     subinit = prog_init_kapitan()
  555.     if subinit then
  556.         table.insert(update_table, subinit)
  557.     end
  558.     subinit = prog_init_lodnik()
  559.     if subinit then
  560.         table.insert(update_table, subinit)
  561.     end
  562.     subinit = prog_init_sklenka()
  563.     if subinit then
  564.         table.insert(update_table, subinit)
  565.     end
  566.     return update_table
  567. end
  568. local update_table = prog_init()
  569.  
  570.  
  571. -- -----------------------------------------------------------------
  572. -- Update
  573. -- -----------------------------------------------------------------
  574. function prog_update()
  575.     for key, subupdate in pairs(update_table) do
  576.         subupdate()
  577.     end
  578. end
  579.  
  580.